package StudentManagerSystem1;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class register {

    //注册方法
    public register() throws IOException {
        // 创建一个用户列表
        ArrayList<User> userList = new ArrayList<>();
        // 将注册信息写入文件
        WriteRegisterInfoToFile(userList);
        // 注册成功，调用注册方法
        registers(userList);
        // 将用户信息写入文件
        WriteUserInfoToFile(userList);
    }
    private void registers(ArrayList<User> userList) {
        Scanner s = new Scanner(System.in);
        // 用户名
        String username;
        while (true) {
            System.out.println("请输入您的用户名:");
            username = s.nextLine();
            boolean flag = CheckUsername(username, userList);
            if (flag) {
                break;
            } else {
                System.out.println("用户名格式不正确或者重复，请重新输入：");
            }

        }
        // 密码
        System.out.println("请输入您的密码:");
        String passWord1 = s.nextLine();
        String passWord2;
        while (true) {
            System.out.println("请再次输入您的密码:");
            passWord2 = s.nextLine();
            if (passWord1.equals(passWord2)) {
                break;
            } else {
                System.out.println("两次输入的密码不一致，请重新输入");
            }
        }
        // 验证码
        String code;
        Code co = new Code();
        String verificationCode = co.code();
        while (true) {
            System.out.println("验证码为："+ verificationCode);
            System.out.println("请输入验证码:");
            code = s.nextLine();
            if (code.equalsIgnoreCase(verificationCode)) {
                break;
            } else {
                System.out.println("验证码输入错误，请重新输入");
            }
        }

        // 电话号码
        String phone;
        while (true) {
            System.out.println("请输入你的电话号码：");
            phone = s.nextLine();
            boolean flag = CheckPhone(phone);
            if (flag) {
                break;
            } else {
                System.out.println("电话号码格式不正确，请重新输入");
            }
        }
        // 身份证号码
        String idCard;
        while (true) {
            System.out.println("请输入你的身份证号码：");
            idCard = s.nextLine();
            boolean flag = CheckIdCard(idCard);
            if (flag) {
                break;
            } else {
                System.out.println("身份证号码格式不正确，请重新输入");
            }
        }
        // 创建用户对象
        User use = new User(username,passWord1, phone, idCard);
        // 将用户对象添加到用户列表中
        userList.add(use);
        System.out.println("注册成功");
    }
    //检查手机号码是否满足要求
    private boolean CheckPhone(String phone) {
        // 判断手机号码的长度是否为11位
        int len = phone.length();
        if (len!= 11) {
            System.out.println("手机号码长度不正确");
            return false;
        }
        // 遍历手机号码的每一位
        for (int i = 0; i < len; i++) {
            // 判断第一位是否为1
            if (i == 0 && phone.charAt(i) != '1') {
                return false;
            } else if (i != 0 && !Character.isDigit(phone.charAt(i))) {
                // 判断其他位是否为数字
                return false;
            }
        }
        // 判断完毕，没有问题，返回true
        return true;
    }

    //检查身份证是否满足要求
    private boolean CheckIdCard(String idCard) {
        // 获取身份证号码的长度
        int len = idCard.length();
        // 判断身份证号码长度是否为18位
        if (len != 18) {
            System.out.println("身份证号码长度不正确");
            return false;
        }
        // 遍历身份证号码的字符串，判断是否含有非法字符
        for (int i = 0; i < idCard.length() - 1; i++) {
            if (idCard.charAt(i) < '0' || idCard.charAt(i) > '9') {
                System.out.println("身份证号码含有非法字符");
                return false;
            }
        }
        // 获取身份证号码的最后一位字符
        char y = idCard.charAt(17);
        // 判断最后一位字符是否为x或者X，并且是否为数字
        if ((y != 'x' && y != 'X')&& (y < '0' || y > '9')){
            return false;
        }
        // 判断成功
        return true;
    }

    //检查用户名是否可用
    private boolean CheckUsername(String username, ArrayList<User> userList) {
        int len = username.length();
        //长度3-15
        if ((len < 3 || len > 15)) {
            return false;
        }
        //唯一
        for (User user : userList) {
            if (user.getName().equals(username)) {
                return false;
            }
        }
        //不能是0开头
        if (username.startsWith("0")) {
            return false;
        }
        //只能是字母加数字组合
        for (int i = 0; i < username.length(); i++) {
            char ch = username.charAt(i);
            if ((ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z') && (ch < '0' || ch > '9')) {
                return false;
            }
        }
        return true;
        //检查用户名是否符合要求，用户名长度在3-15之间，且唯一

    }
    //将用户信息写入文件
    public void WriteUserInfoToFile(ArrayList<User> userList) throws IOException {
        // 创建一个BufferedWriter对象，用于写入文件
        BufferedWriter bw = new BufferedWriter(new FileWriter("user.txt"));

        // 遍历用户列表
        for (User user : userList) {

            // 将用户信息写入文件
            bw.write(user.toString());
            bw.newLine();
        }
        // 刷新缓冲区，将数据写入文件
        bw.flush();
        // 关闭BufferedWriter对象
        bw.close();
    }
    //将注册的信息写入文件
    public void WriteRegisterInfoToFile(ArrayList<User> userList) throws IOException {

        // 创建一个BufferedWriter对象，用于写入文件
        BufferedWriter bw = new BufferedWriter(new FileWriter("user.txt",true));

        // 遍历用户列表
        for (User user : userList) {

            // 将用户信息写入文件
            bw.write(user.toString());
            bw.newLine();
        }
        // 刷新缓冲区，将数据写入文件
        bw.flush();
        // 关闭BufferedWriter对象
        bw.close();
    }
}
